package cn.kgc.springday05.impl;

import cn.kgc.springday05.interfaces.Teacher;

/**
 * @author 课工场
 * @date 2023/10/10
 * @description
 *
 * 实现业务功能的增强
 * 1. 修改了源代码    违背了代码开发的开闭原则
 * 2. 存在代码冗余
 *
 * 解决方案:  在不修改源代码的基础上实现代码功能的增强    AOP  面向切面编程
 *
 * 设计模式  -> 代理模式
 *   1.静态代理
 *      代理对象  (实现业务功能增强对象)    被代理对象  TeacherLi
 *      原则：
 *         1. 代理对象要和被代理对象实现相同接口
 *         2. 代理对象依赖于被代理对象
 *   2.动态代理
 *       不需要在项目中实际开发一个类作为代理类，程序在运行的过程中会动态的生成代理类
 *     2.1 JDK动态代理  基于接口的代理
 *          1.JDK的动态代理也是基于接口的代理  也要和被代理对象实现相同的接口
 *     2.2 cglib动态代理  基于父子类关系的代理
 */
public class TeacherLi implements Teacher {


    @Override
    public String teachOnLine(String course) {

        // 增强上课提示信息
    //        System.out.println("==============上课时间到了================");

        System.out.println(course+"课程线上授课进行中.....");

        // 增强下课提示信息
//        System.out.println("==============下课时间到了================");


        return course+"课程";
    }

    @Override
    public String teachOffLine(String course) {

        // 增强上课提示信息
//        System.out.println("==============上课时间到了================");

        System.out.println(course+"课程线下授课进行中.....");

        // 增强下课提示信息
//        System.out.println("==============下课时间到了================");

        return course+"课程";
    }
}
